﻿using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Media;
using System;
using System.Collections.Generic;

namespace BeatingMole
{
    public class CInfoMap
    {
        #region "Variable"
        private ContentManager _content;
        private SpriteBatch _spriteBatch;
        private GameTime _gametime;

        private int _timeMap;                                           // Thời gian kết thúc màn chơi
        private int _requiredScore;                                     // Số điểm yêu cầu của màn chơi
        private int _level;                                             // Level của màn chơi        
        private CBusListEnemy _listEnemy;                               // Danh sách các Enemy trong màn chơi                   
        private int _numbersEnemy;                                      // Số lượng Enemy

        private Texture2D _background;                                  // Load background cho màn chơi
        private Texture2D _bar;                                         // Thanh bar trong màn chơi                    
        private Texture2D _clock;                                       // Đồng hồ đếm thời của màn chơi
        private Texture2D _timebar;                                     // Thanh timeline màn chơi
        private Texture2D _textPauseGame;                               // Text PauseGame
        private Texture2D _textGameOver;                                // Text GameOver
        private Texture2D _pause;                                       // Texture dừng game
        private SoundEffect _songGameOver;                              // Âm thanh GameOver
        private Song _songPlayGame;                                     // Âm thanh lúc GamePlay
        private bool _isEnabled;                                        // Cho phép hay không cho phép hoạt động
        private bool _isVisibility;                                     // Ẩn | Hiện     
        private float _timeUpdate;
        Random _rnd;
        #endregion

        #region "Properties"
        public float TimeUpdate
        {
            set { _timeUpdate = value; }
            get { return _timeUpdate; }
        }
        public GameTime GameTime
        {
            set { _gametime = value; }
            get { return _gametime; }
        }
        public SpriteBatch SpriteBatch
        {
            set { _spriteBatch = value; }
            get { return _spriteBatch; }
        }
        public ContentManager Content
        {
            set { _content = value; }
            get { return _content; }
        }
        public Song SongPlayGame
        {
            set { _songPlayGame = value; }
            get { return _songPlayGame; }
        }
        public SoundEffect SongGameOver
        {
            set { _songGameOver = value; }
            get { return _songGameOver; }
        }
        public Texture2D TextGameOver
        {
            set { _textGameOver = value; }
            get { return _textGameOver; }
        }
        public Texture2D TextPauseGame
        {
            set { _textPauseGame = value; }
            get { return _textPauseGame; }
        }
        public Texture2D Pause
        {
            set { _pause = value; }
            get { return _pause; }
        }
        public Texture2D TimeBar
        {
            set { _timebar = value; }
            get { return _timebar; }
        }
        public Texture2D Clock
        {
            set { _clock = value; }
            get { return _clock; }
        }
        public bool IsVisibility
        {
            set { _isVisibility = value; }
            get { return _isVisibility; }
        }
        public bool IsEnable
        {
            set { _isEnabled = value; }
            get { return _isEnabled; }
        }
        public Texture2D Bar
        {
            set { _bar = value; }
            get { return _bar; }
        }

        ///// <summary>
        ///// File XML lưu trữ tọa độ vị trí map
        ///// </summary>
        //public Dictionary<string, Vector2> XmlMap
        //{
        //    set { _xmlMap = value; }
        //    get { return _xmlMap; }
        //}
        /// <summary>
        /// Số lượng Enemy của màn chơi
        /// </summary>
        public int NumbersEnemy
        {
            set { _numbersEnemy = value; }
            get { return _numbersEnemy; }
        }
        /// <summary>
        /// Background của màn chơi
        /// </summary>
        public Texture2D Background
        {
            set { _background = value; }
            get { return _background; }
        }
        /// <summary>
        /// Danh sách các Enemy
        /// </summary>
        public CBusListEnemy ListEnemey
        {
            set { _listEnemy = value; }
            get { return _listEnemy; }
        }
        /// <summary>
        /// Cấp độ của màn chơi
        /// </summary>
        public int Level
        {
            set { _level = value; }
            get { return _level; }
        }
        /// <summary>
        /// Thời gian của màn chơi
        /// </summary>
        public int TimeMap
        {
            set { _timeMap = value; }
            get { return _timeMap; }
        }
        /// <summary>
        /// Số điểm của màn chơi
        /// </summary>
        public int RequiredScore
        {
            set { _requiredScore = value; }
            get { return _requiredScore; }
        }
        #endregion

        #region "Constructor"
        /// <summary>
        /// Phương thức khởi tạo không tham số
        /// </summary>
        public CInfoMap()
        {
            TimeMap = 0;
            RequiredScore = 0;
            Level = 0;
            NumbersEnemy = 0;
            ListEnemey = null;
            Background = null;

            Clock = null;
            TextPauseGame = null;
            TextGameOver = null;
            SongGameOver = null;
            SongPlayGame = null;
            TimeBar = null;
            IsEnable = true;
            IsVisibility = true;
            Bar = null;
            Pause = null;
        }

        /// <summary>
        /// (Nguyễn Kim Nhất Quý)
        /// Khởi tạo 3 tham số tham số
        /// </summary>
        /// <param name="content"></param>
        /// <param name="spriteBatch"></param>
        /// <param name="gameTime"></param>
        public CInfoMap(ContentManager content, SpriteBatch spriteBatch, GameTime gameTime)
        {
            _rnd = new Random();
            _spriteBatch = spriteBatch;
            _content = content;
            _gametime = gameTime;

            _timeMap = CGlobalVariable.timeMap;
            _requiredScore = CGlobalVariable.requiredScore * CGlobalVariable.level;
            _level = CGlobalVariable.level;
            if (content != null)
            {
                _background = content.Load<Texture2D>(@"Resource/Maps/gamebg1");
                _bar = content.Load<Texture2D>(@"Resource/Bar/Bar");
                _clock = content.Load<Texture2D>(@"Resource/Maps/clock");
                _timebar = content.Load<Texture2D>(@"Resource/Maps/timebar");
                _pause = content.Load<Texture2D>(@"Resource/Maps/Pause");
                _textPauseGame = content.Load<Texture2D>(@"Resource/Maps/TextPauseGame");
                _textGameOver = content.Load<Texture2D>(@"Resource/Maps/TextGameOver");
                _songPlayGame = content.Load<Song>(@"Resource/Sound/GameMusic");
                _songGameOver = content.Load<SoundEffect>(@"Resource/Sound/Wav/gameover");
            }
            _listEnemy = new CBusListEnemy(_rnd, content, spriteBatch, gameTime);
            _isEnabled = true;
            _isVisibility = true;
        }

        /// <summary>
        /// Phương thức khởi tạo có tham số
        /// </summary>
        /// <param name="spriteBatch"></param>
        /// <param name="timeMap">Thời gian của màn chơi</param>
        /// <param name="requiredScore">Số điểm qua màn</param>
        public CInfoMap(ContentManager content, SpriteBatch sptiteBatch, GameTime gameTime, int timeMap,
            int requiredScore, int level, CBusListEnemy listEnemy,
            Texture2D background, Texture2D bar, Texture2D clock, Texture2D timebar, bool isEnable, bool isVisibility,
            Texture2D pause, Texture2D textPauseGame, Texture2D textGameOver)
        {
            TimeMap = timeMap;
            RequiredScore = requiredScore;
            level = 1;
            ListEnemey = null;
            Background = null;
        }

        /// <summary>
        /// Phương thức sao chép đối tượng Map
        /// </summary>
        /// <param name="map">Đối tượng Map</param>
        public CInfoMap(CInfoMap map)
        {
            SpriteBatch = map.SpriteBatch;
            Clock = map.Clock;
            TimeBar = map.TimeBar;
            IsEnable = map.IsEnable;
            IsVisibility = map.IsVisibility;
            Bar = map.Bar;
            TimeMap = map.TimeMap;
            RequiredScore = map.RequiredScore;
            Pause = map.Pause;
            TextPauseGame = map.TextPauseGame;
            TextGameOver = map.TextGameOver;
        }
        #endregion
    }
}
